The purpose of this exercise is to help familiarize you with some of the Geoprocessing Tools available in the various programs. These tools will help you to simplify, organize, and reduce the amount of information and allow you to create additional base maps from existing data.

1 The Introduction

The Federal Emergency Management Agency  (FEMA) is in the process of planning for the federal distribution of resources related to natural disasters in the US. As hurricane season approaches predictions are suggesting a very active season in the Atlantic Basin. As a FEMA analyst, you have been tasked with examining hurricane paths over the last five years that have impacted the Southeastern US. This information will be used to develop a plan for the establishment of temporary relief shelters, supply storage facilities, and mobile medical services that will be necessary in the hardest hit areas.

In this exercise you will:

  • Use various methods of geoprocessing
  • Create derived datasets
  • Adjust the coordinate systems
  • Create inset maps
  • Use the attribute table for labeling

Software specific directions can be found for each step below. Please submit the answer to the questions and your final map by the due date.

1.1 Step One: The Data

The data you will be using for this exercise comes from the National Oceanic and Atmospheric Administration - Office for Coastal Management, Historical Hurricane Tracks interactive map. Information on the site is derived from the NOAA National Hurricane Center HURDAT2 and NOAA National Centers for Environmental Information IBTrACS data sets.

View Directions in ArcGIS Pro

As you have done with each of the previous exercises, Exercise 2 and Exercise 3, you will begin by launching ArcGIS Pro from the start menu or dekstop shortcut. Select Map from New > Blank Templates and on the resulting screen provide a name and location for your project. Remember it would be beneficial to keep all of these exercises in a single folder on your computer.

With your screen now displaying the World Topographic Map  and World Hillshade  in the table of contents, navigate to GitHub and download all datasets for this exercise here to your project folder and extract the data. If you have any questions on how to retrieve and extract the data refer to Exercise 2, Step 1 for detailed instructions.

Add the states, counties, and all hurricanes  datasets to the map view. Remember that the layers in your Table of Contents  are drawn in the order they appear. So the first item on the list will be the first show, followed, by the second and so on. Therefore, if you want certain datasets to be visible above all others it should be located at the top. For polygons, you can edit the fill and transparency (found under the appearance tab in effects) to allow for items underneath to be scene. For example, in the image below, the hurricane tracts are ordered by year and are situated on top of the county and state polygons. If the polygons were drawn first, the hurricane tracts would not be shown once they make landfall. In this example, the states polygons are displayed with a hollow fill and white border to allow for the counties to show through with their black borders.

Ex4 Datasets

Refer back to previous exercises to review how to change the symbology for a given dataset. You should experiment with different order, fill, and transparencies to customize your view of the data.

Because FEMA is only interested in counties impacted by hurricanes, you need to select only the states that are intersected by the tracts. There are several ways to subset data in ArcGIS Pro. For this example we can select counties by name through a structured query language (SQL), we can use graphical tools to select data, and we can use geoprocessing tools to subset the data. Because this is a learning module, you will be learning several different techniques. While this might not necessarily be the quickest method, the purpose of this exercise is to introduce you to several tools you can use as appropriate in future projects.

To continue gathering data for this exercise you are first going to isolate the data you want to select. In the Table of Contents click the List by Selection button List by Selection to show a list of the selectable datasets in the project. Because you should have a number of datasets in the project, to isolate only the states file, right-click on the USA_States_Continental  and chose “Make this the only selectable layer”.

Make data selectable

To begin, click the drop-down menu for Select  on the Map Tab  and choose Lasso from the drop-down menu and and use the cursor to draw a circle encompassing Alabama, Arkansas, Delaware, Florida, Georgia, Illinois, Indiana, Kentucky, Louisiana, Maryland, Mississippi, Missouri, New Jersey, North Carolina, Ohio, Pennsylvania, South Carolina, Tennessee, Virginia, and West Virginia. Your circle does not need to include all of the state, just a small portion. See the example below:

Lasso Select Tool

With the states selected, return the Table of Contents to the “List by Drawing Order” button List by Drawing Order and right-click on the USA_States_Continental  dataset and choose Data > Export Features from the menu. In the resulting menu include the following options and click OK:

  • Input Features = USA_States_Continental
  • Output Location = Select a folder for the export. It it important that you do not click into the folder, simply click once to select and click OK (see example).
  • Output Name = choose a name for your file and add .shp behind it to create a shapefile.

Export Data

When finished you should have the file added to your project. Another technique to isolate data is by using the Clip analysis tool. This tool can be used to cut out a piece of one dataset using one or more of the features in another dataset as a “cookie cutter”. This is useful for creating a new dataset that contains a geographic subset of the features in another larger dataset.

ArcGIS Pro Clip Illustration

Illustration from https://pro.arcgis.com/en/pro-app/latest/tool-reference/analysis/clip.htm

Under the Analysis Tab, click the Tools button Geoprocessing Tools to open a geoprocessing search menu. In the search box at the top of the menu type in the word Clip and click enter. The first option will show “Clip (Analysis Tools)”. Click on the tool to open the associated menu. In the new menu choose the following options from the drop-down menus and click Run :

  • Input Features = USA_Counties
  • Clip Features = ex4_States (or the name of the file for the selected states in the previous step)
  • Output Feature Class = choose a name for your file and add .shp behind it to create a shapefile.

Clip Analysis Tool

This will create a dataset containing only the counties that are included within the states used as the selection. While the colors were altered to highlight the changes and additions to the project, you should now see a new dataset in your Table of Contents that only contains those counties.

Clipped Counties

Finally, while having the individual hurricane tracts can be important, for the purposes of this exercise you are going to use the Merge tool to combined all of the individual hurricane tracts into a single dataset. Similar to the previous step, click on the Tools  button on the Analysis Tab and search for Merge. Click on Merge (Data Management Tool) and in the new window choose the following options from the drop-down menu and click run:

  • Input Datasets = Either from the drop-down menu or the add many button  Add Many select all of the individual hurricane tracts. If using the “add many” button you will need to click the “add” link in the bottom right-hand corner of the input. If you use the drop-down menu the data will add automatically
  • Output Dataset = choose a name for your file and add .shp behind it to create a shapefile.

Clipped Counties

Question No. 1
How many individual tract segments are contained in the merged hurricane dataset?

View directions in QGIS

Blah…blah…blah…

Question No. 1
Insert Text Here

View directions in R

Before you begin, you will need to open the Ex2 Colab Notebook and insert tocolab after github in the URL to open in the Colab Environment. As you have seen before, R requires various packages to complete certain analyses. In this exercise you will be using tidyverse, OpenStreetMaps, ggfortify, maptools, and rgeos. To install and load the packages we will use the following script:

Blah…blah…blah…

Question No. 1
Insert Text Here

1.2 Step Two: The Analyses

In this step you will organize and display the data in order to prepare it for the final visualization.

View Directions in ArcGIS Pro

Blah…blah…blah…

Question No. 2
Insert Text Here

View Directions in QGIS

Blah…blah…blah…

Question No. 2
Insert Text Here

View Directions in R

Blah…blah…blah…

Question No. 2
Insert Text Here

1.3 Step Three: The Visualization

You will now create a graphical display of your data that includes cartographic elements such as legend, scale bar, north arrow, etc.

View directions in ArcGIS Pro

Blah…blah…blah…

Question No. 3
Insert Text Here

View directions in QGIS

Blah…blah…blah…

Question No. 3
Insert Text Here

View directions in R

Blah…blah…blah…

Question No. 3
Insert Text Here

1.4 Step Four: The Proposal

Blah…blah…blah…

View directions in ArcGIS Pro

Blah…blah…blah…

Question No. 4
Insert Text Here

View directions in QGIS

Blah…blah…blah…

Question No. 4
Insert Text Here

View directions in R

Blah…blah…blah…

Question No. 4
Insert Text Here

2 The Write-Up

Blah…blah…blah…

When complete, send a link to your Colab Notebook or word document with answers to Questions 1-4 and your completed map via email.

LS0tDQp0aXRsZTogIkV4ZXJjaXNlIDQ6IEJhc2ljIEdlb3Byb2Nlc3NpbmcgVG9vbHMgPGJyPjxzbWFsbD5HZW9ncmFwaGljIEluZm9ybWF0aW9uIFN5c3RlbXMgMSBMYWI8L3NtYWxsPjwvYnI+Ig0KYXV0aG9yOiAiR0VPRyAzMTUwIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHJvd3MucHJpbnQ6IDEwDQogICAgdGhlbWU6IGNvc21vDQogICAgaGlnaGxpZ2h0OiBicmVlemVkYXJrDQogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogbm8NCiAgICAgIHNtb290aF9zY3JvbGw6IHllcw0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIGRmX3ByaW50OiBwYWdlZA0KZWRpdG9yX29wdGlvbnM6DQogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUNCiAgbW9kZTogZ2ZtDQotLS0NCg0KYGBgez1odG1sfQ0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDQwcHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovDQogIGZvbnQtc2l6ZTogMjBweDsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouem9vbSB7DQogIHRyYW5zZm9ybS1vcmlnaW46IDQwJSA1MCUgMDsNCiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yczsNCiAgbWFyZ2luOiAwIGF1dG87DQp9DQouem9vbSBpbWd7DQoJd2lkdGg6YXV0bzsNCgloZWlnaHQ6YXV0bzsJDQp9DQouem9vbTpob3ZlciB7DQogIHRyYW5zZm9ybTogc2NhbGUoMik7DQp9DQoNCnRoLCB0ZCB7cGFkZGluZzogNXB4O30NCg0KPC9zdHlsZT4NCmBgYA0KPGhyPjwvaHI+DQoNClRoZSBwdXJwb3NlIG9mIHRoaXMgZXhlcmNpc2UgaXMgdG8gaGVscCBmYW1pbGlhcml6ZSB5b3Ugd2l0aCBzb21lIG9mIHRoZSBHZW9wcm9jZXNzaW5nIFRvb2xzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaW91cyBwcm9ncmFtcy4gVGhlc2UgdG9vbHMgd2lsbCBoZWxwIHlvdSB0byBzaW1wbGlmeSwgb3JnYW5pemUsIGFuZCByZWR1Y2UgdGhlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBhbmQgYWxsb3cgeW91IHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGJhc2UgbWFwcyBmcm9tIGV4aXN0aW5nIGRhdGEuDQoNCiMgVGhlIEludHJvZHVjdGlvbg0KDQpUaGUgX0ZlZGVyYWwgRW1lcmdlbmN5IE1hbmFnZW1lbnQgQWdlbmN5XyZuYnNwOyAoRkVNQSkgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgcGxhbm5pbmcgZm9yIHRoZSBmZWRlcmFsIGRpc3RyaWJ1dGlvbiBvZiByZXNvdXJjZXMgcmVsYXRlZCB0byBuYXR1cmFsIGRpc2FzdGVycyBpbiB0aGUgVVMuIEFzIFtodXJyaWNhbmVdKGh0dHBzOi8vd3d3Lm5vYWEuZ292L25ld3MtcmVsZWFzZS9ub2FhLXByZWRpY3RzLWFub3RoZXItYWN0aXZlLWF0bGFudGljLWh1cnJpY2FuZS1zZWFzb24pIHNlYXNvbiBhcHByb2FjaGVzIHByZWRpY3Rpb25zIGFyZSBzdWdnZXN0aW5nIGEgdmVyeSBhY3RpdmUgc2Vhc29uIGluIHRoZSBBdGxhbnRpYyBCYXNpbi4gQXMgYSBGRU1BIGFuYWx5c3QsIHlvdSBoYXZlIGJlZW4gdGFza2VkIHdpdGggZXhhbWluaW5nIGh1cnJpY2FuZSBwYXRocyBvdmVyIHRoZSBsYXN0IGZpdmUgeWVhcnMgdGhhdCBoYXZlIGltcGFjdGVkIHRoZSBTb3V0aGVhc3Rlcm4gVVMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHRvIGRldmVsb3AgYSBwbGFuIGZvciB0aGUgZXN0YWJsaXNobWVudCBvZiB0ZW1wb3JhcnkgcmVsaWVmIHNoZWx0ZXJzLCBzdXBwbHkgc3RvcmFnZSBmYWNpbGl0aWVzLCBhbmQgbW9iaWxlIG1lZGljYWwgc2VydmljZXMgdGhhdCB3aWxsIGJlIG5lY2Vzc2FyeSBpbiB0aGUgaGFyZGVzdCBoaXQgYXJlYXMuDQoNCkluIHRoaXMgZXhlcmNpc2UgeW91IHdpbGw6DQoNCi0gICBVc2UgdmFyaW91cyBtZXRob2RzIG9mIGdlb3Byb2Nlc3NpbmcNCi0gICBDcmVhdGUgZGVyaXZlZCBkYXRhc2V0cw0KLSAgIEFkanVzdCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW1zDQotICAgQ3JlYXRlIGluc2V0IG1hcHMNCi0gICBVc2UgdGhlIGF0dHJpYnV0ZSB0YWJsZSBmb3IgbGFiZWxpbmcNCg0KU29mdHdhcmUgc3BlY2lmaWMgZGlyZWN0aW9ucyBjYW4gYmUgZm91bmQgZm9yIGVhY2ggc3RlcCBiZWxvdy4gUGxlYXNlIHN1Ym1pdCB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbnMgYW5kIHlvdXIgZmluYWwgbWFwIGJ5IHRoZSBkdWUgZGF0ZS4NCg0KIyMgU3RlcCBPbmU6IFRoZSBEYXRhDQoNClRoZSBkYXRhIHlvdSB3aWxsIGJlIHVzaW5nIGZvciB0aGlzIGV4ZXJjaXNlIGNvbWVzIGZyb20gdGhlIE5hdGlvbmFsIE9jZWFuaWMgYW5kIEF0bW9zcGhlcmljIEFkbWluaXN0cmF0aW9uIC0gW09mZmljZSBmb3IgQ29hc3RhbCBNYW5hZ2VtZW50XShodHRwczovL2NvYXN0Lm5vYWEuZ292LyksIFtIaXN0b3JpY2FsIEh1cnJpY2FuZSBUcmFja3MgaW50ZXJhY3RpdmUgbWFwXShodHRwczovL2NvYXN0Lm5vYWEuZ292L2h1cnJpY2FuZXMvKS4gSW5mb3JtYXRpb24gb24gdGhlIHNpdGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBOT0FBIE5hdGlvbmFsIEh1cnJpY2FuZSBDZW50ZXIgW0hVUkRBVDJdKGh0dHBzOi8vd3d3Lm5oYy5ub2FhLmdvdi9kYXRhLyNodXJkYXQpIGFuZCBOT0FBIE5hdGlvbmFsIENlbnRlcnMgZm9yIEVudmlyb25tZW50YWwgSW5mb3JtYXRpb24gW0lCVHJBQ1NdKGh0dHBzOi8vd3d3Lm5jZGMubm9hYS5nb3YvaWJ0cmFjcy8pIGRhdGEgc2V0cy4NCg0KPGRldGFpbHM+DQo8c3VtbWFyeT48YmlnPlZpZXcgRGlyZWN0aW9ucyBpbiA8Yj4gW0FyY0dJUyBQcm9de3N0eWxlPSJjb2xvcjojZmY0NTAwIn0gPC9iPjwvYmlnPjwvc3VtbWFyeT4NCg0KQXMgeW91IGhhdmUgZG9uZSB3aXRoIGVhY2ggb2YgdGhlIHByZXZpb3VzIGV4ZXJjaXNlcywgRXhlcmNpc2UgMiBhbmQgRXhlcmNpc2UgMywgeW91IHdpbGwgYmVnaW4gYnkgbGF1bmNoaW5nICoqW0FyY0dJUyBQcm9de3N0eWxlPSJjb2xvcjojZmY0NTAwIn0qKiBmcm9tIHRoZSBzdGFydCBtZW51IG9yIGRla3N0b3Agc2hvcnRjdXQuIFNlbGVjdCAqKk1hcCoqIGZyb20gX05ldyA+IEJsYW5rIFRlbXBsYXRlc18gYW5kIG9uIHRoZSByZXN1bHRpbmcgc2NyZWVuIHByb3ZpZGUgYSBuYW1lIGFuZCBsb2NhdGlvbiBmb3IgeW91ciBwcm9qZWN0LiBSZW1lbWJlciBpdCB3b3VsZCBiZSBiZW5lZmljaWFsIHRvIGtlZXAgYWxsIG9mIHRoZXNlIGV4ZXJjaXNlcyBpbiBhIHNpbmdsZSBmb2xkZXIgb24geW91ciBjb21wdXRlci4gDQoNCldpdGggeW91ciBzY3JlZW4gbm93IGRpc3BsYXlpbmcgdGhlIF9Xb3JsZCBUb3BvZ3JhcGhpYyBNYXBfJm5ic3A7IGFuZCBfV29ybGQgSGlsbHNoYWRlXyZuYnNwOyBpbiB0aGUgdGFibGUgb2YgY29udGVudHMsIG5hdmlnYXRlIHRvIEdpdEh1YiBhbmQgZG93bmxvYWQgKipbYWxsIGRhdGFzZXRzIGZvciB0aGlzIGV4ZXJjaXNlIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc21nZW50cnkvR0lTMS1FeGVyY2lzZS00L3RyZWUvbWFpbi9EYXRhKSoqIHRvIHlvdXIgcHJvamVjdCBmb2xkZXIgYW5kIGV4dHJhY3QgdGhlIGRhdGEuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb24gaG93IHRvIHJldHJpZXZlIGFuZCBleHRyYWN0IHRoZSBkYXRhIHJlZmVyIHRvIFtFeGVyY2lzZSAyLCBTdGVwIDFdKGh0dHBzOi8vY2hyaXNtZ2VudHJ5LmdpdGh1Yi5pby9HSVMxLUV4ZXJjaXNlLTIvIzExX1N0ZXBfT25lOl9UaGVfRGF0YSkgZm9yIGRldGFpbGVkIGluc3RydWN0aW9ucy4NCg0KQWRkIHRoZSBfc3RhdGVzXywgX2NvdW50aWVzXywgYW5kIGFsbCBfaHVycmljYW5lc18mbmJzcDsgZGF0YXNldHMgdG8gdGhlIG1hcCB2aWV3LiBSZW1lbWJlciB0aGF0IHRoZSBsYXllcnMgaW4geW91ciBfVGFibGUgb2YgQ29udGVudHNfJm5ic3A7IGFyZSBkcmF3biBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIuIFNvIHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBsaXN0IHdpbGwgYmUgdGhlIGZpcnN0IHNob3csIGZvbGxvd2VkLCBieSB0aGUgc2Vjb25kIGFuZCBzbyBvbi4gVGhlcmVmb3JlLCBpZiB5b3Ugd2FudCBjZXJ0YWluIGRhdGFzZXRzIHRvIGJlIHZpc2libGUgYWJvdmUgYWxsIG90aGVycyBpdCBzaG91bGQgYmUgbG9jYXRlZCBhdCB0aGUgdG9wLiBGb3IgcG9seWdvbnMsIHlvdSBjYW4gZWRpdCB0aGUgZmlsbCBhbmQgdHJhbnNwYXJlbmN5IChmb3VuZCB1bmRlciB0aGUgYXBwZWFyYW5jZSB0YWIgaW4gZWZmZWN0cykgdG8gYWxsb3cgZm9yIGl0ZW1zIHVuZGVybmVhdGggdG8gYmUgc2NlbmUuIEZvciBleGFtcGxlLCBpbiB0aGUgaW1hZ2UgYmVsb3csIHRoZSBodXJyaWNhbmUgdHJhY3RzIGFyZSBvcmRlcmVkIGJ5IHllYXIgYW5kIGFyZSBzaXR1YXRlZCBvbiB0b3Agb2YgdGhlIGNvdW50eSBhbmQgc3RhdGUgcG9seWdvbnMuIElmIHRoZSBwb2x5Z29ucyB3ZXJlIGRyYXduIGZpcnN0LCB0aGUgaHVycmljYW5lIHRyYWN0cyB3b3VsZCBub3QgYmUgc2hvd24gb25jZSB0aGV5IG1ha2UgbGFuZGZhbGwuIEluIHRoaXMgZXhhbXBsZSwgdGhlIHN0YXRlcyBwb2x5Z29ucyBhcmUgZGlzcGxheWVkIHdpdGggYSBob2xsb3cgZmlsbCBhbmQgd2hpdGUgYm9yZGVyIHRvIGFsbG93IGZvciB0aGUgY291bnRpZXMgdG8gc2hvdyB0aHJvdWdoIHdpdGggdGhlaXIgYmxhY2sgYm9yZGVycy4NCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWV4NC1kYXRhLmpwZyIgYWx0PSJFeDQgRGF0YXNldHMiIHN0eWxlPSJ3aWR0aDoxMDAlIj48L2Rpdj48L3A+DQoNClJlZmVyIGJhY2sgdG8gcHJldmlvdXMgZXhlcmNpc2VzIHRvIHJldmlldyBob3cgdG8gY2hhbmdlIHRoZSBzeW1ib2xvZ3kgZm9yIGEgZ2l2ZW4gZGF0YXNldC4gWW91IHNob3VsZCBleHBlcmltZW50IHdpdGggZGlmZmVyZW50IG9yZGVyLCBmaWxsLCBhbmQgdHJhbnNwYXJlbmNpZXMgdG8gY3VzdG9taXplIHlvdXIgdmlldyBvZiB0aGUgZGF0YS4NCg0KQmVjYXVzZSBGRU1BIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiBjb3VudGllcyBpbXBhY3RlZCBieSBodXJyaWNhbmVzLCB5b3UgbmVlZCB0byBzZWxlY3Qgb25seSB0aGUgc3RhdGVzIHRoYXQgYXJlIGludGVyc2VjdGVkIGJ5IHRoZSB0cmFjdHMuIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gc3Vic2V0IGRhdGEgaW4gW0FyY0dJUyBQcm9de3N0eWxlPSJjb2xvcjojZmY0NTAwIn0uIEZvciB0aGlzIGV4YW1wbGUgd2UgY2FuIHNlbGVjdCBjb3VudGllcyBieSBuYW1lIHRocm91Z2ggYSBzdHJ1Y3R1cmVkIHF1ZXJ5IGxhbmd1YWdlIChTUUwpLCB3ZSBjYW4gdXNlIGdyYXBoaWNhbCB0b29scyB0byBzZWxlY3QgZGF0YSwgYW5kIHdlIGNhbiB1c2UgZ2VvcHJvY2Vzc2luZyB0b29scyB0byBzdWJzZXQgdGhlIGRhdGEuIEJlY2F1c2UgdGhpcyBpcyBhIGxlYXJuaW5nIG1vZHVsZSwgeW91IHdpbGwgYmUgbGVhcm5pbmcgc2V2ZXJhbCBkaWZmZXJlbnQgdGVjaG5pcXVlcy4gV2hpbGUgdGhpcyBtaWdodCBub3QgbmVjZXNzYXJpbHkgYmUgdGhlIHF1aWNrZXN0IG1ldGhvZCwgdGhlIHB1cnBvc2Ugb2YgdGhpcyBleGVyY2lzZSBpcyB0byBpbnRyb2R1Y2UgeW91IHRvIHNldmVyYWwgdG9vbHMgeW91IGNhbiB1c2UgYXMgYXBwcm9wcmlhdGUgaW4gZnV0dXJlIHByb2plY3RzLiANCg0KVG8gY29udGludWUgZ2F0aGVyaW5nIGRhdGEgZm9yIHRoaXMgZXhlcmNpc2UgeW91IGFyZSBmaXJzdCBnb2luZyB0byBpc29sYXRlIHRoZSBkYXRhIHlvdSB3YW50IHRvIHNlbGVjdC4gSW4gdGhlIF9UYWJsZSBvZiBDb250ZW50c18gY2xpY2sgdGhlICoqTGlzdCBieSBTZWxlY3Rpb24qKiBidXR0b24gPGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWxpc3Qtc2VsZWN0aW9uLWJ1dHRvbi5qcGciIGFsdD0iTGlzdCBieSBTZWxlY3Rpb24iIHdpZHRoID0gIjIwIiBoZWlnaHQgPSAiMjAiPiB0byBzaG93IGEgbGlzdCBvZiB0aGUgc2VsZWN0YWJsZSBkYXRhc2V0cyBpbiB0aGUgcHJvamVjdC4gQmVjYXVzZSB5b3Ugc2hvdWxkIGhhdmUgYSBudW1iZXIgb2YgZGF0YXNldHMgaW4gdGhlIHByb2plY3QsIHRvIGlzb2xhdGUgb25seSB0aGUgc3RhdGVzIGZpbGUsIHJpZ2h0LWNsaWNrIG9uIHRoZSBfVVNBX1N0YXRlc19Db250aW5lbnRhbF8mbmJzcDsgYW5kIGNob3NlICJNYWtlIHRoaXMgdGhlIG9ubHkgc2VsZWN0YWJsZSBsYXllciIuIA0KDQo8cCBhbGlnbj0iY2VudGVyIj48ZGl2IGNsYXNzPSJ6b29tIj48aW1nIHNyYz0gIkltYWdlcy9hcmNnaXMtbWFrZS1zZWxlY3RhYmxlLnBuZyIgYWx0PSJNYWtlIGRhdGEgc2VsZWN0YWJsZSIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvcD4NCg0KVG8gYmVnaW4sIGNsaWNrIHRoZSBkcm9wLWRvd24gbWVudSBmb3IgX1NlbGVjdF8mbmJzcDsgb24gdGhlIF9NYXAgVGFiXyZuYnNwOyBhbmQgY2hvb3NlICoqTGFzc28qKiBmcm9tIHRoZSBkcm9wLWRvd24gbWVudSBhbmQgYW5kIHVzZSB0aGUgY3Vyc29yIHRvIGRyYXcgYSBjaXJjbGUgZW5jb21wYXNzaW5nIEFsYWJhbWEsIEFya2Fuc2FzLCBEZWxhd2FyZSwgRmxvcmlkYSwgR2VvcmdpYSwgSWxsaW5vaXMsIEluZGlhbmEsIEtlbnR1Y2t5LCBMb3Vpc2lhbmEsIE1hcnlsYW5kLCBNaXNzaXNzaXBwaSwgTWlzc291cmksIE5ldyBKZXJzZXksIE5vcnRoIENhcm9saW5hLCBPaGlvLCBQZW5uc3lsdmFuaWEsIFNvdXRoIENhcm9saW5hLCBUZW5uZXNzZWUsIFZpcmdpbmlhLCBhbmQgV2VzdCBWaXJnaW5pYS4gWW91ciBjaXJjbGUgZG9lcyBub3QgbmVlZCB0byBpbmNsdWRlIGFsbCBvZiB0aGUgc3RhdGUsIGp1c3QgYSBzbWFsbCBwb3J0aW9uLiBTZWUgdGhlIGV4YW1wbGUgYmVsb3c6DQoNCjxwIGFsaWduPSJjZW50ZXIiPjxkaXYgY2xhc3M9Inpvb20iPjxpbWcgc3JjPSAiSW1hZ2VzL2FyY2dpcy1sYXNzby1zZWxlY3QucG5nIiBhbHQ9Ikxhc3NvIFNlbGVjdCBUb29sIiBzdHlsZT0id2lkdGg6MTAwJSI+PC9kaXY+PC9wPg0KDQpXaXRoIHRoZSBzdGF0ZXMgc2VsZWN0ZWQsIHJldHVybiB0aGUgVGFibGUgb2YgQ29udGVudHMgdG8gdGhlICJMaXN0IGJ5IERyYXdpbmcgT3JkZXIiIGJ1dHRvbiA8aW1nIHNyYz0gIkltYWdlcy9hcmNnaXMtbGlzdC1kcmF3LWJ1dHRvbi5qcGciIGFsdD0iTGlzdCBieSBEcmF3aW5nIE9yZGVyIiB3aWR0aCA9ICIyMCIgaGVpZ2h0ID0gIjIwIj4gYW5kIHJpZ2h0LWNsaWNrIG9uIHRoZSBfVVNBX1N0YXRlc19Db250aW5lbnRhbF8mbmJzcDsgZGF0YXNldCBhbmQgY2hvb3NlICoqRGF0YSA+IEV4cG9ydCBGZWF0dXJlcyoqIGZyb20gdGhlIG1lbnUuIEluIHRoZSByZXN1bHRpbmcgbWVudSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhbmQgY2xpY2sgT0s6DQoNCi0gX0lucHV0IEZlYXR1cmVzXyA9IFVTQV9TdGF0ZXNfQ29udGluZW50YWwNCi0gX091dHB1dCBMb2NhdGlvbl8gPSBTZWxlY3QgYSBmb2xkZXIgZm9yIHRoZSBleHBvcnQuIEl0IGl0IGltcG9ydGFudCB0aGF0IHlvdSBkbyBub3QgY2xpY2sgaW50byB0aGUgZm9sZGVyLCBzaW1wbHkgY2xpY2sgb25jZSB0byBzZWxlY3QgYW5kIGNsaWNrIE9LIChzZWUgZXhhbXBsZSkuDQotIF9PdXRwdXQgTmFtZV8gPSBjaG9vc2UgYSBuYW1lIGZvciB5b3VyIGZpbGUgYW5kIGFkZCAuc2hwIGJlaGluZCBpdCB0byBjcmVhdGUgYSBzaGFwZWZpbGUuDQoNCjxwIGFsaWduPSJjZW50ZXIiPjxkaXYgY2xhc3M9Inpvb20iPjxpbWcgc3JjPSAiSW1hZ2VzL2FyY2dpcy1leHBvcnQtZGF0YS5wbmciIGFsdD0iRXhwb3J0IERhdGEiIHN0eWxlPSJ3aWR0aDoxMDAlIj48L2Rpdj48L3A+DQoNCldoZW4gZmluaXNoZWQgeW91IHNob3VsZCBoYXZlIHRoZSBmaWxlIGFkZGVkIHRvIHlvdXIgcHJvamVjdC4gQW5vdGhlciB0ZWNobmlxdWUgdG8gaXNvbGF0ZSBkYXRhIGlzIGJ5IHVzaW5nIHRoZSAqKkNsaXAqKiBhbmFseXNpcyB0b29sLiBUaGlzIHRvb2wgY2FuIGJlIHVzZWQgdG8gY3V0IG91dCBhIHBpZWNlIG9mIG9uZSBkYXRhc2V0IHVzaW5nIG9uZSBvciBtb3JlIG9mIHRoZSBmZWF0dXJlcyBpbiBhbm90aGVyIGRhdGFzZXQgYXMgYSAiY29va2llIGN1dHRlciIuIFRoaXMgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhIG5ldyBkYXRhc2V0IHRoYXQgY29udGFpbnMgYSBnZW9ncmFwaGljIHN1YnNldCBvZiB0aGUgZmVhdHVyZXMgaW4gYW5vdGhlciBsYXJnZXIgZGF0YXNldC4NCg0KPHAgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWNsaXAtaWxsdXN0cmF0aW9uLnBuZyIgYWx0PSJBcmNHSVMgUHJvIENsaXAgSWxsdXN0cmF0aW9uIiB3aWR0aD0iNTE1IiBoZWlnaHQ9IjIwMiI+PGZpZ2NhcHRpb24+PHNtYWxsPjxiPklsbHVzdHJhdGlvbiBmcm9tIGh0dHBzOi8vcHJvLmFyY2dpcy5jb20vZW4vcHJvLWFwcC9sYXRlc3QvdG9vbC1yZWZlcmVuY2UvYW5hbHlzaXMvY2xpcC5odG08L2I+PC9zbWFsbD48L2ZpZ2NhcHRpb24+PC9wPg0KDQpVbmRlciB0aGUgX0FuYWx5c2lzIFRhYl8sIGNsaWNrIHRoZSAqKlRvb2xzKiogYnV0dG9uIDxpbWcgc3JjPSAiSW1hZ2VzL2FyY2dpcy10b29sYm94LWJ1dHRvbi5qcGciIGFsdD0iR2VvcHJvY2Vzc2luZyBUb29scyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIj4gdG8gb3BlbiBhIGdlb3Byb2Nlc3Npbmcgc2VhcmNoIG1lbnUuIEluIHRoZSBzZWFyY2ggYm94IGF0IHRoZSB0b3Agb2YgdGhlIG1lbnUgdHlwZSBpbiB0aGUgd29yZCAqKkNsaXAqKiBhbmQgY2xpY2sgZW50ZXIuIFRoZSBmaXJzdCBvcHRpb24gd2lsbCBzaG93ICIqKkNsaXAqKiAoQW5hbHlzaXMgVG9vbHMpIi4gQ2xpY2sgb24gdGhlIHRvb2wgdG8gb3BlbiB0aGUgYXNzb2NpYXRlZCBtZW51LiBJbiB0aGUgbmV3IG1lbnUgY2hvb3NlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmcm9tIHRoZSBkcm9wLWRvd24gbWVudXMgYW5kIGNsaWNrIFJ1biA6DQoNCi0gX0lucHV0IEZlYXR1cmVzXyA9IFVTQV9Db3VudGllcw0KLSBfQ2xpcCBGZWF0dXJlc18gPSBleDRfU3RhdGVzIChvciB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmb3IgdGhlIHNlbGVjdGVkIHN0YXRlcyBpbiB0aGUgcHJldmlvdXMgc3RlcCkNCi0gX091dHB1dCBGZWF0dXJlIENsYXNzXyA9IGNob29zZSBhIG5hbWUgZm9yIHlvdXIgZmlsZSBhbmQgYWRkIC5zaHAgYmVoaW5kIGl0IHRvIGNyZWF0ZSBhIHNoYXBlZmlsZS4NCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWNsaXAtdG9vbC5wbmciIGFsdD0iQ2xpcCBBbmFseXNpcyBUb29sIiBzdHlsZT0id2lkdGg6MTAwJSI+PC9kaXY+PC9wPg0KDQpUaGlzIHdpbGwgY3JlYXRlIGEgZGF0YXNldCBjb250YWluaW5nIG9ubHkgdGhlIGNvdW50aWVzIHRoYXQgYXJlIGluY2x1ZGVkIHdpdGhpbiB0aGUgc3RhdGVzIHVzZWQgYXMgdGhlIHNlbGVjdGlvbi4gV2hpbGUgdGhlIGNvbG9ycyB3ZXJlIGFsdGVyZWQgdG8gaGlnaGxpZ2h0IHRoZSBjaGFuZ2VzIGFuZCBhZGRpdGlvbnMgdG8gdGhlIHByb2plY3QsIHlvdSBzaG91bGQgbm93IHNlZSBhIG5ldyBkYXRhc2V0IGluIHlvdXIgVGFibGUgb2YgQ29udGVudHMgdGhhdCBvbmx5IGNvbnRhaW5zIHRob3NlIGNvdW50aWVzLiANCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWNsaXBwZWQtZGF0YS5wbmciIGFsdD0iQ2xpcHBlZCBDb3VudGllcyIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvcD4NCg0KRmluYWxseSwgd2hpbGUgaGF2aW5nIHRoZSBpbmRpdmlkdWFsIGh1cnJpY2FuZSB0cmFjdHMgY2FuIGJlIGltcG9ydGFudCwgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGV4ZXJjaXNlIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSAqKk1lcmdlKiogdG9vbCB0byBjb21iaW5lZCBhbGwgb2YgdGhlIGluZGl2aWR1YWwgaHVycmljYW5lIHRyYWN0cyBpbnRvIGEgc2luZ2xlIGRhdGFzZXQuIFNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIHN0ZXAsIGNsaWNrIG9uIHRoZSBfVG9vbHNfJm5ic3A7IGJ1dHRvbiBvbiB0aGUgQW5hbHlzaXMgVGFiIGFuZCBzZWFyY2ggZm9yICoqTWVyZ2UqKi4gQ2xpY2sgb24gKipNZXJnZSoqIChEYXRhIE1hbmFnZW1lbnQgVG9vbCkgYW5kIGluIHRoZSBuZXcgd2luZG93IGNob29zZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZnJvbSB0aGUgZHJvcC1kb3duIG1lbnUgYW5kIGNsaWNrIHJ1bjoNCg0KLSBfSW5wdXQgRGF0YXNldHNfID0gRWl0aGVyIGZyb20gdGhlIGRyb3AtZG93biBtZW51IG9yIHRoZSBfYWRkIG1hbnkgYnV0dG9uXyZuYnNwOyA8aW1nIHNyYz0gIkltYWdlcy9hcmNnaXMtYWRkLW1hbnktYnV0dG9uLmpwZyIgYWx0PSJBZGQgTWFueSIgd2lkdGggPSAiMTAiIGhlaWdodCA9ICIxMCI+IHNlbGVjdCBhbGwgb2YgdGhlIGluZGl2aWR1YWwgaHVycmljYW5lIHRyYWN0cy4gSWYgdXNpbmcgdGhlICJhZGQgbWFueSIgYnV0dG9uIHlvdSB3aWxsIG5lZWQgdG8gY2xpY2sgdGhlICJhZGQiIGxpbmsgaW4gdGhlIGJvdHRvbSByaWdodC1oYW5kIGNvcm5lciBvZiB0aGUgaW5wdXQuIElmIHlvdSB1c2UgdGhlIGRyb3AtZG93biBtZW51IHRoZSBkYXRhIHdpbGwgYWRkIGF1dG9tYXRpY2FsbHkNCi0gX091dHB1dCBEYXRhc2V0XyA9IGNob29zZSBhIG5hbWUgZm9yIHlvdXIgZmlsZSBhbmQgYWRkIC5zaHAgYmVoaW5kIGl0IHRvIGNyZWF0ZSBhIHNoYXBlZmlsZS4NCg0KPHAgYWxpZ249ImNlbnRlciI+PGRpdiBjbGFzcz0iem9vbSI+PGltZyBzcmM9ICJJbWFnZXMvYXJjZ2lzLWNsaXBwZWQtZGF0YS5wbmciIGFsdD0iQ2xpcHBlZCBDb3VudGllcyIgc3R5bGU9IndpZHRoOjEwMCUiPjwvZGl2PjwvcD4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gMTwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KSG93IG1hbnkgaW5kaXZpZHVhbCB0cmFjdCBzZWdtZW50cyBhcmUgY29udGFpbmVkIGluIHRoZSBtZXJnZWQgaHVycmljYW5lIGRhdGFzZXQ/DQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz4NCjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbUUdJU117c3R5bGU9ImNvbG9yOiAjMDA2NDAwIn0gPC9iPjwvYmlnPjwvc3VtbWFyeT4NCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDE8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQo8aHI+PC9ocj4NCg0KPGRldGFpbHM+PHN1bW1hcnk+PGJpZz5WaWV3IGRpcmVjdGlvbnMgaW4gPGI+IFtSXXtzdHlsZT0iY29sb3I6ICM2NDk1RUQifSA8L2I+PC9zcGFuPjwvYmlnPjwvc3VtbWFyeT4NCkJlZm9yZSB5b3UgYmVnaW4sIHlvdSB3aWxsIG5lZWQgdG8gb3BlbiB0aGUgW0V4MiBDb2xhYiBOb3RlYm9va10oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzbWdlbnRyeS9HSVMxLUV4ZXJjaXNlLTkvYmxvYi9tYWluL0dJUzFfRVg5LmlweW5iKSBhbmQgaW5zZXJ0ICoqdG9jb2xhYioqIGFmdGVyIF9naXRodWJfIGluIHRoZSBVUkwgdG8gb3BlbiBpbiB0aGUgX0NvbGFiIEVudmlyb25tZW50Xy4gQXMgeW91IGhhdmUgc2VlbiBiZWZvcmUsIFIgcmVxdWlyZXMgdmFyaW91cyBwYWNrYWdlcyB0byBjb21wbGV0ZSBjZXJ0YWluIGFuYWx5c2VzLiBJbiB0aGlzIGV4ZXJjaXNlIHlvdSB3aWxsIGJlIHVzaW5nICoqdGlkeXZlcnNlLCBPcGVuU3RyZWV0TWFwcywgZ2dmb3J0aWZ5LCBtYXB0b29scywgYW5kIHJnZW9zKiouIFRvIGluc3RhbGwgYW5kIGxvYWQgdGhlIHBhY2thZ2VzIHdlIHdpbGwgdXNlIHRoZSBmb2xsb3dpbmcgc2NyaXB0Og0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gMTwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCg0KIyMgU3RlcCBUd286IFRoZSBBbmFseXNlcw0KDQpJbiB0aGlzIHN0ZXAgeW91IHdpbGwgb3JnYW5pemUgYW5kIGRpc3BsYXkgdGhlIGRhdGEgaW4gb3JkZXIgdG8gcHJlcGFyZSBpdCBmb3IgdGhlIGZpbmFsIHZpc3VhbGl6YXRpb24uDQoNCjxkZXRhaWxzPg0KPHN1bW1hcnk+PGJpZz5WaWV3IERpcmVjdGlvbnMgaW4gPGI+IFtBcmNHSVMgUHJvXXtzdHlsZT0iY29sb3I6I2ZmNDUwMCJ9IDwvYj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPg0KPHN1bW1hcnk+PGJpZz5WaWV3IERpcmVjdGlvbnMgaW4gPGI+IFtRR0lTXXtzdHlsZT0iY29sb3I6IzAwNjQwMCJ9IDwvYj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPg0KPHN1bW1hcnk+PGJpZz5WaWV3IERpcmVjdGlvbnMgaW4gPGI+IFtSXXtzdHlsZT0iY29sb3I6IzY0OTVFRCJ9IDwvYj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAyPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KDQojIyBTdGVwIFRocmVlOiBUaGUgVmlzdWFsaXphdGlvbg0KDQpZb3Ugd2lsbCBub3cgY3JlYXRlIGEgZ3JhcGhpY2FsIGRpc3BsYXkgb2YgeW91ciBkYXRhIHRoYXQgaW5jbHVkZXMgY2FydG9ncmFwaGljIGVsZW1lbnRzIHN1Y2ggYXMgbGVnZW5kLCBzY2FsZSBiYXIsIG5vcnRoIGFycm93LCBldGMuDQoNCjxkZXRhaWxzPjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbQXJjR0lTIFByb117c3R5bGU9ImNvbG9yOiNmZjQ1MDAifSA8L2I+PC9zcGFuPjwvYmlnPjwvc3VtbWFyeT4NCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDM8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQo8aHI+PC9ocj4NCg0KPGRldGFpbHM+PHN1bW1hcnk+PGJpZz5WaWV3IGRpcmVjdGlvbnMgaW4gPGI+IFtRR0lTXXtzdHlsZT0iY29sb3I6IzAwNjQwMCJ9IDwvYj48L3NwYW4+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gMzwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz48c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW1Jde3N0eWxlPSJjb2xvcjojNjQ5NUVEIn0gPC9iPjwvc3Bhbj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiAzPC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KDQojIyBTdGVwIEZvdXI6IFRoZSBQcm9wb3NhbA0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGRldGFpbHM+PHN1bW1hcnk+PGJpZz5WaWV3IGRpcmVjdGlvbnMgaW4gPGI+IFtBcmNHSVMgUHJvXXtzdHlsZT0iY29sb3I6I2ZmNDUwMCJ9IDwvYj48L3NwYW4+PC9iaWc+PC9zdW1tYXJ5Pg0KDQpCbGFoLi4uYmxhaC4uLmJsYWguLi4NCg0KPGJpZz48Yj5RdWVzdGlvbiBOby4gNDwvYj48L2JpZz4NCjxibG9ja3F1b3RlPg0KX0luc2VydCBUZXh0IEhlcmVfDQo8L2Jsb2NrcXVvdGU+DQoNCjwvZGV0YWlscz4NCjxocj48L2hyPg0KDQo8ZGV0YWlscz48c3VtbWFyeT48YmlnPlZpZXcgZGlyZWN0aW9ucyBpbiA8Yj4gW1FHSVNde3N0eWxlPSJjb2xvcjojMDA2NDAwIn0gPC9iPjwvc3Bhbj48L2JpZz48L3N1bW1hcnk+DQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQo8YmlnPjxiPlF1ZXN0aW9uIE5vLiA0PC9iPjwvYmlnPg0KPGJsb2NrcXVvdGU+DQpfSW5zZXJ0IFRleHQgSGVyZV8NCjwvYmxvY2txdW90ZT4NCg0KPC9kZXRhaWxzPg0KPGhyPjwvaHI+DQoNCjxkZXRhaWxzPjxzdW1tYXJ5PjxiaWc+VmlldyBkaXJlY3Rpb25zIGluIDxiPiBbUl17c3R5bGU9ImNvbG9yOiM2NDk1RUQifSA8L2I+PC9zcGFuPjwvYmlnPjwvc3VtbWFyeT4NCg0KQmxhaC4uLmJsYWguLi5ibGFoLi4uDQoNCjxiaWc+PGI+UXVlc3Rpb24gTm8uIDQ8L2I+PC9iaWc+DQo8YmxvY2txdW90ZT4NCl9JbnNlcnQgVGV4dCBIZXJlXw0KPC9ibG9ja3F1b3RlPg0KDQo8L2RldGFpbHM+DQoNCiMgVGhlIFdyaXRlLVVwDQoNCkJsYWguLi5ibGFoLi4uYmxhaC4uLg0KDQpXaGVuIGNvbXBsZXRlLCBzZW5kIGEgbGluayB0byB5b3VyIF9Db2xhYiBOb3RlYm9va18gb3Igd29yZCBkb2N1bWVudCB3aXRoIGFuc3dlcnMgdG8gUXVlc3Rpb25zIDEtNCBhbmQgeW91ciBjb21wbGV0ZWQgbWFwIHZpYSBlbWFpbC4=